package com.liliudong.rommath.biz.sys.service;


import com.liliudong.rommath.biz.sys.entity.SysRole;
import com.liliudong.rommath.biz.sys.param.SysRoleAddParam;
import com.liliudong.rommath.biz.sys.param.SysRoleModifyParam;
import com.liliudong.rommath.biz.sys.param.SysRolePageParam;
import com.liliudong.rommath.biz.sys.result.SysRolePageResult;
import com.liliudong.rommath.common.consts.RommathConst;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.service.IService;

import java.util.List;

import static com.liliudong.rommath.biz.sys.entity.table.SysRoleTableDef.SYS_ROLE;

/**
 * 系统角色 服务层。
 *
 * @author liudong.li
 * @since 1.0.0
 */
public interface SysRoleService extends IService<SysRole> {

    default QueryChain<SysRole> queryChainIgnoreDataPermission() {
        return queryChain()
                .from(SYS_ROLE.as(RommathConst.IGNORE_TABLE_ALIAS));
    }

    /**
     * 按用户id选择代码
     *
     * @param userId sys用户id
     * @return {@link List }<{@link String }>
     */
    List<String> selectCodesByUserIdIgnoreDataPermission(Long userId);

    /**
     * 按用户id选择数据范围
     *
     * @param userId 用户id
     * @return {@link List }<{@link Integer }>
     */
    List<Integer> selectDataScopesByUserIdIgnoreDataPermission(Long userId);

    /**
     * 添加
     *
     * @param param param
     */
    void add(SysRoleAddParam param);

    /**
     * 按id删除
     *
     * @param id 身份证件
     */
    void deleteById(Long id);

    /**
     * 修改
     *
     * @param param param
     */
    void modify(SysRoleModifyParam param);

    /**
     * 查询页面
     *
     * @param param param
     * @return {@link Page }<{@link SysRolePageResult }>
     */
    Page<SysRolePageResult> queryPage(SysRolePageParam param);
}